﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;

namespace Commerce.Base.Ubl
{
    [DataObject(true)]
    public class Product
    {
        private DataType.Identifier id;
        private DataType.Indicator orderableIndicator;
        private DataType.Text orderableUnit;
        private DataType.Numeric contentUnitQuantity;
        private RequiredItemLocationQuantity requiredItemLocationQuantity;
        private Item item;

        /// <summary>
        /// Entydigt instans-id for linjen i dette katalogdokument.
        /// </summary>
        public DataType.Identifier Id
        {
            get { return id; }
            set { id = value; }
        }

        /// <summary>
        /// Angiver, om linjen kan bestilles (dvs. den ikke kun er beregnet til information)
        /// </summary>
        public DataType.Indicator OrderableIndicator
        {
            get { return orderableIndicator; }
            set { orderableIndicator = value; }
        }

        /// <summary>
        /// Den enhed, der kan bestilles i.
        /// </summary>
        public DataType.Text OrderableUnit
        {
            get { return orderableUnit; }
            set { orderableUnit = value; }
        }

        /// <summary>
        /// Præcisering af bestillingsenheden.
        /// </summary>
        /// <example>
        /// Er bestillingsenheden f.eks. PK (pakke), kan der i bestillingsmængdeenhed præciseres, at pakken består af 10 EA (stk)
        /// </example>
        public DataType.Numeric ContentUnitQuantity
        {
            get { return contentUnitQuantity; }
            set { contentUnitQuantity = value; }
        }
        
        /// <summary>
        /// Oplysninger vedrørende beskrivelsen af egenskaber, der vedrører varens placeringer og mængder.
        /// </summary>
        public RequiredItemLocationQuantity RequiredItemLocationQuantity
        {
            get { return requiredItemLocationQuantity; }
            set { requiredItemLocationQuantity = value; }
        }

        /// <summary>
        /// Oplysninger vedrørende den pågældende Vare.
        /// </summary>
        public Item Item
        {
            get { return item; }
            set { item = value; }
        }

        public Product(DataType.Identifier id, DataType.Indicator orderableIndicator, DataType.Numeric contentUnitQuantity, Item item) 
        {
            this.id = id;
            this.orderableIndicator = orderableIndicator;
            this.contentUnitQuantity = contentUnitQuantity;
            this.item = item;
        }

        [DataObjectMethod(DataObjectMethodType.Select)]
        public static List<Product> GetProducts(string groupId)
        {
            List<Product> products = new List<Product>();
            for (int i = 1; i <= 10; i++)
            {
                products.Add(GetProduct(i));
            }
            
            return products;
        }

        [DataObjectMethod(DataObjectMethodType.Select)]
        public static Product GetProduct(DataType.Identifier productId)
        {
            Product product = new Product(productId, true, 1, new Item("Test" + productId, new ItemIdentification("1"), new CommodityClassification("12")));
            return product;
        }
    }
}
